🎖️GitЯра🎖️
Node / meshtastic / Meshtastic-Android / files / feature / docs / src / commonTest / kotlin / org / meshtastic / feature / docs / translation / MarkdownTranslationSegmenterTest.kt
Displaying Raw • Download
feature/docs/src/commonTest/kotlin/org/meshtastic/feature/docs/translation/MarkdownTranslationSegmenterTest.kt bc4e9da3ad7a2a22768cbaecc75810e018bc40e2 (bc4e9da3) Text, 6.38 KB
T8b949e/*
* Copyright (c) 2026 Meshtastic LLC
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
Tff7b72package T7ee787org.meshtastic.feature.docs.translation
Tff7b72import T7ee787kotlinx.coroutines.test.runTest
Tff7b72import T7ee787kotlin.test.Test
Tff7b72import T7ee787kotlin.test.assertContains
Tff7b72import T7ee787kotlin.test.assertEquals
Tff7b72import T7ee787kotlin.test.assertFalse
Tff7b72class T56d364MarkdownTranslationSegmenterTest Tb4b4b4{
T8b949e/** Simple uppercase "translator" for deterministic assertions. */
Tff7b72private Tff7b72val Te6edf3uppercaseTranslatorTb4b4b4: Te6edf3suspend Tb4b4b4(Tffa657StringTb4b4b4) Tff7b72-Tff7b72> Tffa657String Tff7b72= Tb4b4b4{ Tffa657itTb4b4b4.Te6edf3uppercaseTb4b4b4(Tb4b4b4) Tb4b4b4}
Tf0883e@Test
Tff7b72fun Td2a8ff`paragraphs are translated`Tb4b4b4(Tb4b4b4) Tff7b72= Te6edf3runTest Tb4b4b4{
Tff7b72val Te6edf3input Tff7b72= Ta5d6ff"Ta5d6ffHello worldTa5d6ff\Ta5d6ffnTa5d6ff\Ta5d6ffnThis is a paragraphTa5d6ff"
Tff7b72val Te6edf3result Tff7b72= Te6edf3MarkdownTranslationSegmenterTb4b4b4.Te6edf3translateMarkdownTb4b4b4(Te6edf3inputTb4b4b4, Te6edf3uppercaseTranslatorTb4b4b4)
Te6edf3assertContainsTb4b4b4(Te6edf3resultTb4b4b4, Ta5d6ff"Ta5d6ffHELLO WORLDTa5d6ff"Tb4b4b4)
Te6edf3assertContainsTb4b4b4(Te6edf3resultTb4b4b4, Ta5d6ff"Ta5d6ffTHIS IS A PARAGRAPHTa5d6ff"Tb4b4b4)
Tb4b4b4}
Tf0883e@Test
Tff7b72fun Td2a8ff`headings are translated`Tb4b4b4(Tb4b4b4) Tff7b72= Te6edf3runTest Tb4b4b4{
Tff7b72val Te6edf3input Tff7b72= Ta5d6ff"Ta5d6ff# WelcomeTa5d6ff\Ta5d6ffn## Getting StartedTa5d6ff"
Tff7b72val Te6edf3result Tff7b72= Te6edf3MarkdownTranslationSegmenterTb4b4b4.Te6edf3translateMarkdownTb4b4b4(Te6edf3inputTb4b4b4, Te6edf3uppercaseTranslatorTb4b4b4)
Te6edf3assertContainsTb4b4b4(Te6edf3resultTb4b4b4, Ta5d6ff"Ta5d6ff# WELCOMETa5d6ff"Tb4b4b4)
Te6edf3assertContainsTb4b4b4(Te6edf3resultTb4b4b4, Ta5d6ff"Ta5d6ff## GETTING STARTEDTa5d6ff"Tb4b4b4)
Tb4b4b4}
Tf0883e@Test
Tff7b72fun Td2a8ff`fenced code blocks are NOT translated`Tb4b4b4(Tb4b4b4) Tff7b72= Te6edf3runTest Tb4b4b4{
Tff7b72val Te6edf3input Tff7b72= Ta5d6ff"Ta5d6ffBefore codeTa5d6ff\Ta5d6ffnTa5d6ff\Ta5d6ffn```kotlinTa5d6ff\Ta5d6ffnval x = 1Ta5d6ff\Ta5d6ffn```Ta5d6ff\Ta5d6ffnTa5d6ff\Ta5d6ffnAfter codeTa5d6ff"
Tff7b72val Te6edf3result Tff7b72= Te6edf3MarkdownTranslationSegmenterTb4b4b4.Te6edf3translateMarkdownTb4b4b4(Te6edf3inputTb4b4b4, Te6edf3uppercaseTranslatorTb4b4b4)
Te6edf3assertContainsTb4b4b4(Te6edf3resultTb4b4b4, Ta5d6ff"Ta5d6ffBEFORE CODETa5d6ff"Tb4b4b4)
Te6edf3assertContainsTb4b4b4(Te6edf3resultTb4b4b4, Ta5d6ff"Ta5d6ffval x = 1Ta5d6ff"Tb4b4b4)
Te6edf3assertContainsTb4b4b4(Te6edf3resultTb4b4b4, Ta5d6ff"Ta5d6ffAFTER CODETa5d6ff"Tb4b4b4)
Te6edf3assertFalseTb4b4b4(Te6edf3resultTb4b4b4.Te6edf3containsTb4b4b4(Ta5d6ff"Ta5d6ffVAL X = 1Ta5d6ff"Tb4b4b4)Tb4b4b4)
Tb4b4b4}
Tf0883e@Test
Tff7b72fun Td2a8ff`indented code blocks are NOT translated`Tb4b4b4(Tb4b4b4) Tff7b72= Te6edf3runTest Tb4b4b4{
Tff7b72val Te6edf3input Tff7b72= Ta5d6ff"Ta5d6ffSome textTa5d6ff\Ta5d6ffnTa5d6ff\Ta5d6ffn code line 1Ta5d6ff\Ta5d6ffn code line 2Ta5d6ff\Ta5d6ffnTa5d6ff\Ta5d6ffnMore textTa5d6ff"
Tff7b72val Te6edf3result Tff7b72= Te6edf3MarkdownTranslationSegmenterTb4b4b4.Te6edf3translateMarkdownTb4b4b4(Te6edf3inputTb4b4b4, Te6edf3uppercaseTranslatorTb4b4b4)
Te6edf3assertContainsTb4b4b4(Te6edf3resultTb4b4b4, Ta5d6ff"Ta5d6ffSOME TEXTTa5d6ff"Tb4b4b4)
Te6edf3assertContainsTb4b4b4(Te6edf3resultTb4b4b4, Ta5d6ff"Ta5d6ff code line 1Ta5d6ff"Tb4b4b4)
Te6edf3assertContainsTb4b4b4(Te6edf3resultTb4b4b4, Ta5d6ff"Ta5d6ffMORE TEXTTa5d6ff"Tb4b4b4)
Tb4b4b4}
Tf0883e@Test
Tff7b72fun Td2a8ff`inline code is NOT translated`Tb4b4b4(Tb4b4b4) Tff7b72= Te6edf3runTest Tb4b4b4{
Tff7b72val Te6edf3input Tff7b72= Ta5d6ff"Ta5d6ffUse `meshtastic --info` to checkTa5d6ff"
Tff7b72val Te6edf3result Tff7b72= Te6edf3MarkdownTranslationSegmenterTb4b4b4.Te6edf3translateMarkdownTb4b4b4(Te6edf3inputTb4b4b4, Te6edf3uppercaseTranslatorTb4b4b4)
Te6edf3assertContainsTb4b4b4(Te6edf3resultTb4b4b4, Ta5d6ff"Ta5d6ff`meshtastic --info`Ta5d6ff"Tb4b4b4)
Te6edf3assertContainsTb4b4b4(Te6edf3resultTb4b4b4, Ta5d6ff"Ta5d6ffUSETa5d6ff"Tb4b4b4)
Te6edf3assertContainsTb4b4b4(Te6edf3resultTb4b4b4, Ta5d6ff"Ta5d6ffTO CHECKTa5d6ff"Tb4b4b4)
Tb4b4b4}
Tf0883e@Test
Tff7b72fun Td2a8ff`link text is translated but URL is preserved`Tb4b4b4(Tb4b4b4) Tff7b72= Te6edf3runTest Tb4b4b4{
Tff7b72val Te6edf3input Tff7b72= Ta5d6ff"Ta5d6ffClick [here](https://example.com) for moreTa5d6ff"
Tff7b72val Te6edf3result Tff7b72= Te6edf3MarkdownTranslationSegmenterTb4b4b4.Te6edf3translateMarkdownTb4b4b4(Te6edf3inputTb4b4b4, Te6edf3uppercaseTranslatorTb4b4b4)
Te6edf3assertContainsTb4b4b4(Te6edf3resultTb4b4b4, Ta5d6ff"Ta5d6ff[HERE](https://example.com)Ta5d6ff"Tb4b4b4)
Te6edf3assertContainsTb4b4b4(Te6edf3resultTb4b4b4, Ta5d6ff"Ta5d6ffCLICKTa5d6ff"Tb4b4b4)
Tb4b4b4}
Tf0883e@Test
Tff7b72fun Td2a8ff`images are NOT translated`Tb4b4b4(Tb4b4b4) Tff7b72= Te6edf3runTest Tb4b4b4{
Tff7b72val Te6edf3input Tff7b72= Ta5d6ff"Ta5d6ffSee the diagram:Ta5d6ff\Ta5d6ffnTa5d6ff\Ta5d6ffnTa5d6ff"
Tff7b72val Te6edf3result Tff7b72= Te6edf3MarkdownTranslationSegmenterTb4b4b4.Te6edf3translateMarkdownTb4b4b4(Te6edf3inputTb4b4b4, Te6edf3uppercaseTranslatorTb4b4b4)
Te6edf3assertContainsTb4b4b4(Te6edf3resultTb4b4b4, Ta5d6ff"Ta5d6ffTa5d6ff"Tb4b4b4)
Te6edf3assertContainsTb4b4b4(Te6edf3resultTb4b4b4, Ta5d6ff"Ta5d6ffSEE THE DIAGRAM:Ta5d6ff"Tb4b4b4)
Tb4b4b4}
Tf0883e@Test
Tff7b72fun Td2a8ff`frontmatter is NOT translated`Tb4b4b4(Tb4b4b4) Tff7b72= Te6edf3runTest Tb4b4b4{
Tff7b72val Te6edf3input Tff7b72= Ta5d6ff"Ta5d6ff---Ta5d6ff\Ta5d6ffntitle: My PageTa5d6ff\Ta5d6ffnlayout: defaultTa5d6ff\Ta5d6ffn---Ta5d6ff\Ta5d6ffnTa5d6ff\Ta5d6ffnHello worldTa5d6ff"
Tff7b72val Te6edf3result Tff7b72= Te6edf3MarkdownTranslationSegmenterTb4b4b4.Te6edf3translateMarkdownTb4b4b4(Te6edf3inputTb4b4b4, Te6edf3uppercaseTranslatorTb4b4b4)
Te6edf3assertContainsTb4b4b4(Te6edf3resultTb4b4b4, Ta5d6ff"Ta5d6fftitle: My PageTa5d6ff"Tb4b4b4)
Te6edf3assertContainsTb4b4b4(Te6edf3resultTb4b4b4, Ta5d6ff"Ta5d6fflayout: defaultTa5d6ff"Tb4b4b4)
Te6edf3assertContainsTb4b4b4(Te6edf3resultTb4b4b4, Ta5d6ff"Ta5d6ffHELLO WORLDTa5d6ff"Tb4b4b4)
Tb4b4b4}
Tf0883e@Test
Tff7b72fun Td2a8ff`list items are translated`Tb4b4b4(Tb4b4b4) Tff7b72= Te6edf3runTest Tb4b4b4{
Tff7b72val Te6edf3input Tff7b72= Ta5d6ff"Ta5d6ff- First itemTa5d6ff\Ta5d6ffn- Second itemTa5d6ff\Ta5d6ffn* Third itemTa5d6ff"
Tff7b72val Te6edf3result Tff7b72= Te6edf3MarkdownTranslationSegmenterTb4b4b4.Te6edf3translateMarkdownTb4b4b4(Te6edf3inputTb4b4b4, Te6edf3uppercaseTranslatorTb4b4b4)
Te6edf3assertContainsTb4b4b4(Te6edf3resultTb4b4b4, Ta5d6ff"Ta5d6ff- FIRST ITEMTa5d6ff"Tb4b4b4)
Te6edf3assertContainsTb4b4b4(Te6edf3resultTb4b4b4, Ta5d6ff"Ta5d6ff- SECOND ITEMTa5d6ff"Tb4b4b4)
Te6edf3assertContainsTb4b4b4(Te6edf3resultTb4b4b4, Ta5d6ff"Ta5d6ff* THIRD ITEMTa5d6ff"Tb4b4b4)
Tb4b4b4}
Tf0883e@Test
Tff7b72fun Td2a8ff`ordered list items are translated`Tb4b4b4(Tb4b4b4) Tff7b72= Te6edf3runTest Tb4b4b4{
Tff7b72val Te6edf3input Tff7b72= Ta5d6ff"Ta5d6ff1. First stepTa5d6ff\Ta5d6ffn2. Second stepTa5d6ff"
Tff7b72val Te6edf3result Tff7b72= Te6edf3MarkdownTranslationSegmenterTb4b4b4.Te6edf3translateMarkdownTb4b4b4(Te6edf3inputTb4b4b4, Te6edf3uppercaseTranslatorTb4b4b4)
Te6edf3assertContainsTb4b4b4(Te6edf3resultTb4b4b4, Ta5d6ff"Ta5d6ff1. FIRST STEPTa5d6ff"Tb4b4b4)
Te6edf3assertContainsTb4b4b4(Te6edf3resultTb4b4b4, Ta5d6ff"Ta5d6ff2. SECOND STEPTa5d6ff"Tb4b4b4)
Tb4b4b4}
Tf0883e@Test
Tff7b72fun Td2a8ff`blockquotes are translated`Tb4b4b4(Tb4b4b4) Tff7b72= Te6edf3runTest Tb4b4b4{
Tff7b72val Te6edf3input Tff7b72= Ta5d6ff"Ta5d6ff> Important note hereTa5d6ff"
Tff7b72val Te6edf3result Tff7b72= Te6edf3MarkdownTranslationSegmenterTb4b4b4.Te6edf3translateMarkdownTb4b4b4(Te6edf3inputTb4b4b4, Te6edf3uppercaseTranslatorTb4b4b4)
Te6edf3assertContainsTb4b4b4(Te6edf3resultTb4b4b4, Ta5d6ff"Ta5d6ff> IMPORTANT NOTE HERETa5d6ff"Tb4b4b4)
Tb4b4b4}
Tf0883e@Test
Tff7b72fun Td2a8ff`table cells are translated but separators are not`Tb4b4b4(Tb4b4b4) Tff7b72= Te6edf3runTest Tb4b4b4{
Tff7b72val Te6edf3input Tff7b72= Ta5d6ff"Ta5d6ff| Header 1 | Header 2 |Ta5d6ff\Ta5d6ffn|---|---|Ta5d6ff\Ta5d6ffn| Cell A | Cell B |Ta5d6ff"
Tff7b72val Te6edf3result Tff7b72= Te6edf3MarkdownTranslationSegmenterTb4b4b4.Te6edf3translateMarkdownTb4b4b4(Te6edf3inputTb4b4b4, Te6edf3uppercaseTranslatorTb4b4b4)
Te6edf3assertContainsTb4b4b4(Te6edf3resultTb4b4b4, Ta5d6ff"Ta5d6ffHEADER 1Ta5d6ff"Tb4b4b4)
Te6edf3assertContainsTb4b4b4(Te6edf3resultTb4b4b4, Ta5d6ff"Ta5d6ffHEADER 2Ta5d6ff"Tb4b4b4)
Te6edf3assertContainsTb4b4b4(Te6edf3resultTb4b4b4, Ta5d6ff"Ta5d6ff|---|---|Ta5d6ff"Tb4b4b4)
Te6edf3assertContainsTb4b4b4(Te6edf3resultTb4b4b4, Ta5d6ff"Ta5d6ffCELL ATa5d6ff"Tb4b4b4)
Te6edf3assertContainsTb4b4b4(Te6edf3resultTb4b4b4, Ta5d6ff"Ta5d6ffCELL BTa5d6ff"Tb4b4b4)
Tb4b4b4}
Tf0883e@Test
Tff7b72fun Td2a8ff`empty input returns empty output`Tb4b4b4(Tb4b4b4) Tff7b72= Te6edf3runTest Tb4b4b4{
Tff7b72val Te6edf3result Tff7b72= Te6edf3MarkdownTranslationSegmenterTb4b4b4.Te6edf3translateMarkdownTb4b4b4(Ta5d6ff"Ta5d6ff"Tb4b4b4, Te6edf3uppercaseTranslatorTb4b4b4)
Te6edf3assertEqualsTb4b4b4(Ta5d6ff"Ta5d6ff"Tb4b4b4, Te6edf3resultTb4b4b4)
Tb4b4b4}
Tf0883e@Test
Tff7b72fun Td2a8ff`html blocks are NOT translated`Tb4b4b4(Tb4b4b4) Tff7b72= Te6edf3runTest Tb4b4b4{
Tff7b72val Te6edf3input Tff7b72= Ta5d6ff"Ta5d6ffBeforeTa5d6ff\Ta5d6ffnTa5d6ff\Ta5d6ffn<div class=Ta5d6ff\"Ta5d6ffnoteTa5d6ff\"Ta5d6ff>Don't translate</div>Ta5d6ff\Ta5d6ffnTa5d6ff\Ta5d6ffnAfterTa5d6ff"
Tff7b72val Te6edf3result Tff7b72= Te6edf3MarkdownTranslationSegmenterTb4b4b4.Te6edf3translateMarkdownTb4b4b4(Te6edf3inputTb4b4b4, Te6edf3uppercaseTranslatorTb4b4b4)
Te6edf3assertContainsTb4b4b4(Te6edf3resultTb4b4b4, Ta5d6ff"Ta5d6ff<div class=Ta5d6ff\"Ta5d6ffnoteTa5d6ff\"Ta5d6ff>Don't translate</div>Ta5d6ff"Tb4b4b4)
Te6edf3assertContainsTb4b4b4(Te6edf3resultTb4b4b4, Ta5d6ff"Ta5d6ffBEFORETa5d6ff"Tb4b4b4)
Te6edf3assertContainsTb4b4b4(Te6edf3resultTb4b4b4, Ta5d6ff"Ta5d6ffAFTERTa5d6ff"Tb4b4b4)
Tb4b4b4}
Tf0883e@Test
Tff7b72fun Td2a8ff`nested list indentation is preserved`Tb4b4b4(Tb4b4b4) Tff7b72= Te6edf3runTest Tb4b4b4{
Tff7b72val Te6edf3input Tff7b72= Ta5d6ff"Ta5d6ff- ParentTa5d6ff\Ta5d6ffn - Child itemTa5d6ff"
Tff7b72val Te6edf3result Tff7b72= Te6edf3MarkdownTranslationSegmenterTb4b4b4.Te6edf3translateMarkdownTb4b4b4(Te6edf3inputTb4b4b4, Te6edf3uppercaseTranslatorTb4b4b4)
Te6edf3assertContainsTb4b4b4(Te6edf3resultTb4b4b4, Ta5d6ff"Ta5d6ff- PARENTTa5d6ff"Tb4b4b4)
Te6edf3assertContainsTb4b4b4(Te6edf3resultTb4b4b4, Ta5d6ff"Ta5d6ff - CHILD ITEMTa5d6ff"Tb4b4b4)
Tb4b4b4}
Tb4b4b4}
Served by rngit 1.5.0 - Generated in 0.06s